<?php
	
	/* 
	--------------------------------------------------------------
	gmOrderPDF.php 16.01.2008 pt
	Gambio OHG
	http://www.gambio.de
	Copyright (c) 2008 Gambio OHG
   Released under the GNU General Public License (Version 2)
   [http://www.gnu.org/licenses/gpl-2.0.html]
	--------------------------------------------------------------
	*/

	require(DIR_FS_CATALOG . 'PdfCreator/fpdf.php');
	require('gmPDF.php');
	
	/*
	*	class to create packingslip and invoice pdf
	*/
	class gmOrderPDF extends gmPDF {
		
		/*
		*	type of document, invoice or packingslip
		*/
		var $pdf_type;		

		/*
		*	use following features 
		*/
		var $pdf_use_logo;

		var $pdf_use_conditions;

		var $pdf_use_withdrawal;
		
		var $pdf_use_products_model;
		
		/*
		*	margins and positions of the elements 
		*/
		var $pdf_customer_adr_pos;
		
		var $pdf_heading_margin_bottom;
		
		var $pdf_heading_margin_top;
		
		var $pdf_order_info_margin_top;		
		
		/*
		*	logo
		*/
		var $pdf_logo_path;
		
		var $pdf_link;		

		/*
		*	contents
		*/
		var $pdf_company_adress_left;
		
		var $pdf_company_adress_right; 
		
		var $pdf_cancel; 
		
		var $pdf_customer_adress;

		var $pdf_heading;

		var $pdf_heading_info;

		var $pdf_heading_conditions;

		var $pdf_heading_withdrawal;

		var $pdf_conditions;

		var $pdf_withdrawal;		

		var $pdf_show_tax;		

		var $pdf_ot_gm_tax_free;		

		/*
		*	pdf draw color
		*/
		var $pdf_draw_color;
		
		/*
		*	pdf fonts, array
		*/
		var $pdf_fonts = array();
		
		/*
		*	arrays, containing the order/total/info data or footer
		*/
		var $order_data = array();
		
		var $order_total = array();		
		
		var $order_info = array();
		
		var $pdf_footer = array();		
		
		/*
		*	values generated in class
		*/
		var $pdf_last_header_pos_right;

		var $pdf_last_header_pos_left;

		var $pdf_order_data_cell_width = array();

		var $pdf_order_total_cell_width = array();

		var $pdf_order_info_cell_width = array();

		var $pdf_is_attachment;
		
		/* 
		*	constructor
		*/
		function gmOrderPDF($type, $order_right, $order_data, $order_total, $order_info, $pdf_footer, $pdf_fonts, $gm_pdf_values, $gm_order_pdf_values, $gm_use_products_model) {
			
			// -> set type
			$this->pdf_type	= $type;
			
			// -> set fonts
			$this->pdf_fonts = $pdf_fonts;
			
			// -> set right side of order
			$this->pdf_company_adress_right	= $order_right; 			

			// -> set order data
			$this->order_data = $order_data;
		
			// -> set order total data 
			$this->order_total = $order_total;
		
			// -> set order total data 
			$this->order_info = $order_info;
			
			// -> set footer
			$this->pdf_footer = $pdf_footer;
			
			// -> call parent constructor
			parent::gmPDF($gm_pdf_values);

			// -> set defaults
			$this->pdf_draw_color				= parent::getRGB($gm_order_pdf_values['GM_PDF_DRAW_COLOR']);			
			$this->pdf_customer_adr_pos			= $gm_order_pdf_values['GM_PDF_CUSTOMER_ADR_POS'];
			$this->pdf_heading_margin_bottom	= $gm_order_pdf_values['GM_PDF_HEADING_MARGIN_BOTTOM'];
			$this->pdf_heading_margin_top		= $gm_order_pdf_values['GM_PDF_HEADING_MARGIN_TOP'];
			$this->pdf_order_info_margin_top	= $gm_order_pdf_values['GM_PDF_ORDER_INFO_MARGIN_TOP'];
			$this->pdf_use_logo					= $gm_order_pdf_values['GM_LOGO_PDF_USE'];
			$this->pdf_logo_path				= $gm_order_pdf_values['GM_PDF_LOGO_LINK'];
			$this->pdf_link						= $gm_order_pdf_values['GM_PDF_LINK'];
			$this->pdf_company_adress_left		= $gm_order_pdf_values['GM_PDF_COMPANY_ADRESS_LEFT'];
			$this->pdf_customer_adress			= $gm_order_pdf_values['GM_PDF_CUSTOMER_ADRESS'];
			$this->pdf_heading					= $gm_order_pdf_values['GM_PDF_HEADING'];
			$this->pdf_heading_info				= $gm_order_pdf_values['GM_PDF_HEADING_INFO'];
			$this->pdf_heading_conditions		= $gm_order_pdf_values['GM_PDF_HEADING_CONDITIONS'];
			$this->pdf_heading_withdrawal		= $gm_order_pdf_values['GM_PDF_HEADING_WITHDRAWAL'];
			$this->pdf_conditions				= $gm_order_pdf_values['GM_PDF_CONDITIONS'];
			$this->pdf_withdrawal				= $gm_order_pdf_values['GM_PDF_WITHDRAWAL'];
			$this->pdf_use_conditions			= $gm_order_pdf_values['GM_PDF_USE_CONDITIONS'];
			$this->pdf_use_withdrawal			= $gm_order_pdf_values['GM_PDF_USE_WITHDRAWAL'];
			$this->pdf_show_tax					= $gm_order_pdf_values['GM_PDF_SHOW_TAX'];
			$this->pdf_cancel					= $gm_order_pdf_values['GM_PDF_CANCEL'];
			$this->pdf_use_products_model		= $gm_use_products_model;

			// -> to set the author of the pdfument
			parent::SetAuthor($this->pdf_company_adress_left);
			
			// -> to the title of the pdfument
			parent::SetTitle($this->pdf_heading); 
			
			// -> to set the subject of the pdfument
			parent::SetSubject($this->pdf_heading); 
			
			// -> to set the keywords of the pdfument
			parent::SetKeywords(str_replace("\n", ",", $this->pdf_company_adress_right)); 
			
			// -> to set the creator of the pdfument
			parent::SetCreator('fpdf.org/gambio.de'); 

			// -> check if ot_gm_tax_free is installed in conf
			if($this->is_ot_gm_tax_free() && gm_get_conf('TAX_INFO_TAX_FREE') == 'true')
			{
				$this->pdf_show_tax = 0;
				$this->pdf_ot_gm_tax_free = true;
			}
			else
			{
				$this->pdf_ot_gm_tax_free = false;
			}

			// -> width factor for the order data table
			if($this->pdf_type == 'invoice') {

				// remove attributes col if there are no attributes
				if($this->pdf_use_products_model == false) {
					
					// check if col tax is in use
					if($this->pdf_show_tax == 0) {	
						// remove col tax
						$this->pdf_order_data_cell_width = array(parent::getInnerWidth()*0, parent::getInnerWidth()*0.5, parent::getInnerWidth()*0.1, parent::getInnerWidth()*0, parent::getInnerWidth()*0.2, parent::getInnerWidth()*0.2);					
					} else {
						// show col tax
						$this->pdf_order_data_cell_width = array(parent::getInnerWidth()*0, parent::getInnerWidth()*0.4, parent::getInnerWidth()*0.1, parent::getInnerWidth()*0.1, parent::getInnerWidth()*0.25, parent::getInnerWidth()*0.15);
					}

				} else {

					// check if col tax is in use
					if($this->pdf_show_tax == 0) {	
						// remove col tax
						$this->pdf_order_data_cell_width = array(parent::getInnerWidth()*0.15, parent::getInnerWidth()*0.35, parent::getInnerWidth()*0.1, parent::getInnerWidth()*0, parent::getInnerWidth()*0.2, parent::getInnerWidth()*0.2);
					} else {
						// show col tax
						$this->pdf_order_data_cell_width = array(parent::getInnerWidth()*0.15, parent::getInnerWidth()*0.3, parent::getInnerWidth()*0.1, parent::getInnerWidth()*0.1, parent::getInnerWidth()*0.2, parent::getInnerWidth()*0.15);
					}					
				}

			} else {
				
				if($this->pdf_use_products_model == false) {
					$this->pdf_order_data_cell_width = array(parent::getInnerWidth()*0, parent::getInnerWidth()*0.9, parent::getInnerWidth()*0.1); 
				} else {
					$this->pdf_order_data_cell_width = array(parent::getInnerWidth()*0.15, parent::getInnerWidth()*0.75, parent::getInnerWidth()*0.1); 					
				}
			}			
			
			// -> width factor for the order total table
			$this->pdf_order_total_cell_width = array(parent::getInnerWidth()*0.8, parent::getInnerWidth()*0.2);

			// -> width factor for the order info table
			$this->pdf_order_info_cell_width = array(0 => parent::getInnerWidth()*0.3, 1 => parent::getInnerWidth()*0.7);
			
			return;		
		}


		/* 
		*	-> define PDF Body 
		*/
		function Body() {
			
			parent::AddPage();

			// -> check if header not fixed on every page, then put it out once a time
			if($this->pdf_fix_header == 0 && $this->pdf_use_header == 1) {
				// -> call function of daughter class
				$this->getHeader();				
			}		
			$this->getOrderHeader();
			$this->getBody();
			// -> use conditions - show them in a newpage
			if($this->pdf_use_conditions) {
				$this->pdf_is_attachment = $this->pdf_heading_conditions;
				parent::AddPage();
				$this->getConditions();
			}
			
			// -> use withdrawal - show them in a newpage
			if($this->pdf_use_withdrawal) {
				$this->pdf_is_attachment = $this->pdf_heading_withdrawal;
				parent::AddPage();
				$this->getWithdrawal();
			}		

			return;
		}	


		/* 
		*	-> create Header
		*/
		function getHeader() {

			/*
			*	-> right side
			*/
			
			// -> check if logo is used
			if($this->pdf_use_logo == 1) {
				$this->getLogo();
				parent::Ln(3);
			}
			
			// -> font face/style/size/color
			parent::getFont($this->pdf_fonts['COMPANY_RIGHT']);
			
			parent::SetY(parent::GetY());
			parent::SetX(parent::getInnerWidth()/2 + parent::getLeftMargin());
			parent::MultiCell(parent::getInnerWidth()/2, parent::getCellHeight(), $this->pdf_company_adress_right, '0', 'R', 0);
			
			// -> STORNO
			if(!empty($this->pdf_cancel)) {
				parent::getFont($this->pdf_fonts['CANCEL']);
			
				parent::SetY(parent::GetY());
				parent::SetX(parent::getInnerWidth()/2 + parent::getLeftMargin());
				parent::MultiCell(parent::getInnerWidth()/2, parent::getCellHeight(), $this->pdf_cancel, '0', 'R', 0);
			}
			
			//	-> get last y position of the right side
			$this->pdf_last_header_pos_right = parent::GetY();

			/*
			*	-> left side
			*/
			// -> set draw color
			parent::SetDrawColor((int)$this->pdf_draw_color['r'], (int)$this->pdf_draw_color['g'], (int)$this->pdf_draw_color['b']); 

			// -> font face/style/size/color
			parent::getFont($this->pdf_fonts['COMPANY_LEFT']);

			parent::SetY($this->pdf_customer_adr_pos);
			parent::SetX(parent::GetX());
			parent::MultiCell(parent::getInnerWidth()/2, parent::getCellHeight(), $this->pdf_company_adress_left, '0', 'L', 0);
			
			// -> font face/style/size/color
			parent::getFont($this->pdf_fonts['CUSTOMER']);
			
			parent::SetY(parent::GetY());
			parent::SetX(parent::GetX());
			parent::MultiCell(parent::getInnerWidth()/2, parent::getCellHeight(), $this->pdf_customer_adress, '0', 'L', 0);
			
			//	-> get last y position of the left side
			$this->pdf_last_header_pos_left = parent::GetY();
			
			return;		
		}

		
		/* 
		*	-> create Body
		*/
		function getOrderHeader() {
			
			//	-> set new y position for following elements
			if($this->pdf_fix_header == 0 && parent::PageNo() != 1) {
				parent::SetY(parent::GetY());
			} else {
				$y = $this->getPos();
				parent::SetY($y);
			}
						
			if($this->pdf_fix_header == 1 || parent::PageNo() == 1) {
				parent::Ln((int)$this->pdf_heading_margin_top);
			} 

			$y = parent::GetY();
			
			// -> font face/style/size/color
			parent::getFont($this->pdf_fonts['HEADING']);
			
			parent::SetY($y);			
			parent::SetX(parent::getLeftMargin());
			parent::MultiCell(parent::getInnerWidth()/2, parent::getCellHeight(), $this->pdf_heading, '0', 'L', 0);
		
			parent::SetY($y);
			parent::SetX(parent::getLeftMargin() + parent::getInnerWidth()/2);
			parent::MultiCell(parent::getInnerWidth()/2, parent::getCellHeight(), PDF_PAGE . " " . parent::PageNo(), '0', 'R', 0);
			
			parent::Ln((int)$this->pdf_heading_margin_bottom);
		}


		/* 
		*	-> get header for withdrawal/conditions
		*/
		function getCondralHeader() {

			$y = parent::GetY();
			
			// -> font face/style/size/color
			parent::getFont($this->pdf_fonts['HEADING_CONDITIONS']);
			
			parent::SetY($y);			
			parent::SetX(parent::getLeftMargin());
			parent::MultiCell(parent::getInnerWidth() * 0.75, parent::getCellHeight(), $this->pdf_is_attachment, '0', 'L', 0);
		
			parent::SetY($y);
			parent::SetX(parent::getLeftMargin() + parent::getInnerWidth()*0.75);
			parent::MultiCell(parent::getInnerWidth() * 0.25, parent::getCellHeight(), PDF_PAGE . " " . parent::PageNo(), '0', 'R', 0);

			parent::SetY(parent::GetY());
			
			parent::SetX(parent::getLeftMargin());
			
			// -> set draw color
			parent::SetDrawColor((int)$this->pdf_draw_color['r'], (int)$this->pdf_draw_color['g'], (int)$this->pdf_draw_color['b']); 
			
			parent::MultiCell(parent::getInnerWidth(), 3, '', 'T', '', 0);

		}


		/* 
		*	-> create Body
		*/
		function getBody() {
			
			// -> font face/style/size/color
			parent::getFont($this->pdf_fonts['HEADING_ORDER']);

			/*
			* -> order data table
			*/	
			if($this->pdf_ot_gm_tax_free)
			{
				$y = $this->getCells(PDF_HEADING_MODEL, PDF_HEADING_ARTICLE_NAME, PDF_HEADING_UNIT, PDF_HEADING_NETTO_PRICE, PDF_HEADING_SINGLE_PRICE, PDF_HEADING_PRICE, '', $this->pdf_fonts_size, '',  parent::GetY());		
			}
			else
			{
				$y = $this->getCells(PDF_HEADING_MODEL, PDF_HEADING_ARTICLE_NAME, PDF_HEADING_UNIT, PDF_HEADING_NETTO_PRICE, ($this->pdf_show_tax) ? PDF_HEADING_SINGLE_PRICE . PDF_HEADING_INCL : PDF_HEADING_SINGLE_PRICE . PDF_HEADING_EXCL, PDF_HEADING_PRICE, '', $this->pdf_fonts_size, '',  parent::GetY());		
			}
			
			// -> set draw color
			parent::SetDrawColor((int)$this->pdf_draw_color['r'], (int)$this->pdf_draw_color['g'], (int)$this->pdf_draw_color['b']);			
			parent::SetLineWidth(0.1);			
			parent::Line(parent::getLeftMargin(), $y, parent::getInnerWidth()+parent::getLeftMargin(), $y);
			
			parent::Ln(2);			
			$y = $y + 2;			
			/*
			* -> order data
			*/			
			foreach($this->order_data as $product) {

				// -> font face/style/size/color
				parent::getFont($this->pdf_fonts['ORDER']);
				
				$new_y = $this->is_newPage($product, $product['PRODUCTS_ATTRIBUTES'], $y);
				if(!empty($new_y)) {
					$y = $new_y;
				}
				
				// -> font face/style/size/color
				parent::getFont($this->pdf_fonts['ORDER']);
				
				$y = $this->getCells($product['PRODUCTS_MODEL'], $product['PRODUCTS_NAME'], $product['PRODUCTS_QTY'].' '.$product['PRODUCTS_UNIT'], $product['PRODUCTS_TAX'], $product['PRODUCTS_PRICE_SINGLE'], $product['PRODUCTS_PRICE'], '', $this->pdf_fonts_size, '0', $y);
				
				if(!empty($product['PRODUCTS_ATTRIBUTES'])) {
					foreach($product['PRODUCTS_ATTRIBUTES'] as $attribute) {							
						$y = $this->getCells($attribute[0], '- ' . $attribute[1], '', '', '', '', '', $this->pdf_fonts_size, '', $y);
					}
				}
			}

			/*
			* -> order total data 
			*/
			if($this->pdf_type == 'invoice') {
				
				// -> font face/style/size/color
				parent::getFont($this->pdf_fonts['ORDER_TOTAL']);
				
				$get_y = $this->is_newPageOt($this->order_total, $y, 2, parent::getCellHeight(), $this->pdf_order_total_cell_width);
				
				if(!empty($get_y)) {
					parent::SetY($get_y);
				} else {
					parent::SetY($y);
				}
							
				parent::SetX(parent::getLeftMargin());
				parent::MultiCell(parent::getInnerWidth(), 3, '', 'T', '', 0);
				
				$y = parent::GetY();
				
				foreach($this->order_total as $key => $value) {
					
					if(strpos($value['TITLE'], '<b>') !== false)  {
						$style = "B";
					} 	
					elseif(isset($style)) unset($style);
					
					// -> font face/style/size/color
					parent::getFont($this->pdf_fonts['ORDER_TOTAL'], $style);
					
					parent::SetY($y);
					parent::SetX(parent::getLeftMargin());
					parent::MultiCell($this->pdf_order_total_cell_width[0], parent::getCellHeight(), trim(strip_tags($value['TITLE'])), '0', 'R', 0);
					
					$actual_y = $this->getActualY($y);

					parent::SetY($y);				 
					parent::SetX(parent::getLeftMargin() + $this->pdf_order_total_cell_width[0]);
					parent::MultiCell($this->pdf_order_total_cell_width[1], parent::getCellHeight(),  trim(strip_tags($value['TEXT'])), '0', 'R', 0);
				
					$y = $this->getActualY($actual_y);
				}
			}


			/*
			* -> order info data
			*/
			if(!empty($this->order_info)) {
				
				// -> font face/style/size/color
				parent::getFont($this->pdf_fonts['ORDER_INFO']);
				
				$y = $this->is_newPageOi($this->order_info, parent::GetY(), (int)$this->pdf_order_info_margin_top, (parent::getCellHeight())+3, $this->pdf_order_info_cell_width);
				
					parent::SetY($y);
				
				// -> font face/style/size/color
				parent::getFont($this->pdf_fonts['HEADING_ORDER_INFO']);
			
				parent::SetY($y);
				parent::SetX(parent::getLeftMargin());
				parent::MultiCell(parent::getInnerWidth(), parent::getCellHeight(), $this->pdf_heading_info, '0', 'L', 0);

				parent::SetY(parent::GetY());
				parent::SetX(parent::getLeftMargin());
				parent::MultiCell(parent::getInnerWidth(), 3, '', 'T', '', 0);
				
				$y = parent::GetY();
				
				foreach($this->order_info as $key => $value) {
					// -> font face/style/size/color
					parent::getFont($this->pdf_fonts['ORDER_INFO']);

					parent::SetY($y);
					parent::SetX(parent::getLeftMargin());
					parent::MultiCell($this->pdf_order_info_cell_width[0], parent::getCellHeight(), $value[0], '0', 'L', 0);
					
					$actual_y = $this->getActualY($y);

					parent::SetY($y);				 
					parent::SetX(parent::getLeftMargin() + $this->pdf_order_info_cell_width[0]);
					parent::MultiCell($this->pdf_order_info_cell_width[1], parent::getCellHeight(), $value[1], '0', 'L', 0);
					
					$y = $this->getActualY($actual_y);

				}
			}			
			
			return;
		}
	
		
		/* 
		*	-> to get a new page if previous is full
		*/
		function is_newPage($product, $attributes, $y) {	
			
			if(($this->getMaxCellHeight($product, $attributes, $this->pdf_order_data_cell_width) + $y) > $this->pdf_footer_position - 5) {
				parent::AddPage();
				$this->getOrderHeader();
				$y = parent::GetY();
				
				// -> font face/style/size/color
				parent::getFont($this->pdf_fonts['HEADING_ORDER']);

				$y = $this->getCells(PDF_HEADING_MODEL, PDF_HEADING_ARTICLE_NAME, PDF_HEADING_UNIT, PDF_HEADING_NETTO_PRICE, ($this->pdf_show_tax) ? PDF_HEADING_SINGLE_PRICE . PDF_HEADING_INCL : PDF_HEADING_SINGLE_PRICE . PDF_HEADING_EXCL, PDF_HEADING_PRICE, '', $this->pdf_fonts_size, '',  parent::GetY());		
				// -> set draw color
				
				parent::SetDrawColor((int)$this->pdf_draw_color['r'], (int)$this->pdf_draw_color['g'], (int)$this->pdf_draw_color['b']);			
				parent::SetLineWidth(0.1);			
				parent::Line(parent::getLeftMargin(), $y, parent::getInnerWidth()+parent::getLeftMargin(), $y);
				parent::Ln(2);
				
				return ($y + 2);
			} 
			
			return;
		}

		
		/* 
		*	-> to get a new page if previous is full order_total and order_info
		*/
		function is_newPageOt($order, $y, $break, $extra, $table_size) {
		
			if(($this->getMaxHeight($order, $table_size) + $y + $break + $extra) >= ($this->h - parent::getPageBreak())) {
				parent::AddPage();
				$this->getOrderHeader();
				return parent::GetY();
			} else {
				parent::Ln($break);
				return;
			}
		}

		
		/* 
		*	-> to get a new page if previous is full order_total and order_info
		*/
		function is_newPageOi($order, $y, $break, $extra, $table_size) {
		
			if(($this->getMaxHeight($order, $table_size) + $y + $break + $extra) >= ($this->h - parent::getPageBreak())) {
				parent::AddPage();
				$this->getOrderHeader();
			} else {
				parent::Ln($break);
			}
			return parent::GetY();
		}

		
		/* 
		*	-> create Footer
		*/
		function getFooter() {

			// -> get footer cell width
			$footer_cell_width = parent::getInnerWidth() / count($this->pdf_footer);	
			
			// -> font face/style/size/color
			parent::getFont($this->pdf_fonts['FOOTER']);
			
			// -> set draw color
			parent::SetDrawColor((int)$this->pdf_draw_color['r'], (int)$this->pdf_draw_color['g'], (int)$this->pdf_draw_color['b']); 
			
			parent::SetLineWidth(0.1);
			
			parent::Line(parent::getLeftMargin(), parent::getFooterPos(), parent::getInnerWidth()+parent::getLeftMargin(), parent::getFooterPos());			
			
			for($i = 0; $i < count($this->pdf_footer); $i++) {
				parent::SetY(parent::getFooterPos() + 2);
				parent::SetX(parent::getLeftMargin() + ($footer_cell_width * $i));
				parent::MultiCell($footer_cell_width, parent::getCellHeight(), $this->pdf_footer[$i], '0', 'L', 0);
			}
			
			return;
		}	

		
		/* 
		*	-> get actual y position
		*/
		function getActualY($get_y) {
			$actual_y = parent::GetY();
			if($get_y < $actual_y) {
				$get_y = $actual_y;
			}
				return $get_y;
		}
		

		/* 
		*	-> draw table for order
		*/
		function getCells($cell_1, $cell_2, $cell_3, $cell_4, $cell_5, $cell_6, $font_style = '', $font_size = '', $border = '', $y) {
			
			if($this->pdf_use_products_model) { 
				$get_y = $this->getActualY($y);

				parent::SetY($y);
				parent::SetX(parent::getLeftMargin());
				parent::MultiCell($this->pdf_order_data_cell_width[0], parent::getCellHeight(), $cell_1, $border, 'L', 0);
			}
			
			$get_y = $this->getActualY($get_y);
			
			parent::SetY($y);
			parent::SetX(parent::getLeftMargin() + $this->pdf_order_data_cell_width[0]);
			parent::MultiCell($this->pdf_order_data_cell_width[1], parent::getCellHeight(), $cell_2, $border, 'L', 0);
			
			$get_y = $this->getActualY($get_y);
			
			parent::SetY($y);
			parent::SetX(parent::getLeftMargin() + $this->pdf_order_data_cell_width[0] + $this->pdf_order_data_cell_width[1]);
			parent::MultiCell($this->pdf_order_data_cell_width[2], parent::getCellHeight(), $cell_3, $border, 'C', 0);
			
			$get_y = $this->getActualY($get_y);
			
			if($this->pdf_type == 'invoice') {
				
				if($this->pdf_show_tax) {

					parent::SetY($y);
					parent::SetX(parent::getLeftMargin() + $this->pdf_order_data_cell_width[0] + $this->pdf_order_data_cell_width[1] + $this->pdf_order_data_cell_width[2]);
					parent::MultiCell($this->pdf_order_data_cell_width[3], parent::getCellHeight(), $cell_4, $border, 'R', 0);				
				
					$get_y = $this->getActualY($get_y);
					
					parent::SetY($y);
					parent::SetX(parent::getLeftMargin() + $this->pdf_order_data_cell_width[0] + $this->pdf_order_data_cell_width[1] + $this->pdf_order_data_cell_width[2] + $this->pdf_order_data_cell_width[3]);
					parent::MultiCell($this->pdf_order_data_cell_width[4], parent::getCellHeight(), $cell_5, $border, 'R', 0);
					
					$get_y = $this->getActualY($get_y);
					
					parent::SetY($y);
					parent::SetX(parent::getLeftMargin() + $this->pdf_order_data_cell_width[0] + $this->pdf_order_data_cell_width[1] + $this->pdf_order_data_cell_width[2] + $this->pdf_order_data_cell_width[3] + $this->pdf_order_data_cell_width[4]);
					parent::MultiCell($this->pdf_order_data_cell_width[5], parent::getCellHeight(), $cell_6, $border, 'R', 0);
					
					$get_y = $this->getActualY($get_y);
				
				} else {
					
					parent::SetY($y);
					parent::SetX(parent::getLeftMargin() + $this->pdf_order_data_cell_width[0] + $this->pdf_order_data_cell_width[1] + $this->pdf_order_data_cell_width[2]);
					parent::MultiCell($this->pdf_order_data_cell_width[4], parent::getCellHeight(), $cell_5, $border, 'R', 0);
					
					$get_y = $this->getActualY($get_y);
					
					parent::SetY($y);
					parent::SetX(parent::getLeftMargin() + $this->pdf_order_data_cell_width[0] + $this->pdf_order_data_cell_width[1] + $this->pdf_order_data_cell_width[2] + $this->pdf_order_data_cell_width[4]);
					parent::MultiCell($this->pdf_order_data_cell_width[5], parent::getCellHeight(), $cell_6, $border, 'R', 0);
					
					$get_y = $this->getActualY($get_y);
				}
			
			}
	
			return $get_y;
		}
		
		
		/* 
		*	-> get Logo
		*/
		function getLogo() {
			
			$logo_size = getimagesize($this->pdf_logo_path);

			$mm_x = $logo_size[0] / $this->k;
			$mm_y = $logo_size[1] / $this->k;

			if($mm_x > parent::getInnerWidth()/2) {
				$mm_x = parent::getInnerWidth()/2 - 1;
				$mm_y = 0;
			} 

			$pos_x = parent::getLeftMargin() + parent::getInnerWidth() - $mm_x;			 

			parent::Image($this->pdf_logo_path, $pos_x, parent::getTopMargin(),$mm_x, $mm_y, substr(strrchr($logo_size['mime'], '/'),1),  $this->pdf_link);
		}


		/* 
		*	-> get position where body starts
		*/
		function getPos() {
			
			// -> if header used get last y position of the left & right part of it 
			if($this->pdf_use_header == 1) {		
				
				if($this->pdf_last_header_pos_right > $this->pdf_last_header_pos_left) {
					return $this->pdf_last_header_pos_right;
				} else {
					return $this->pdf_last_header_pos_left;
				}
			
			// -> if header not used get the actual y position
			} else {
				return parent::GetY();
			}			
		}
		

		/* 
		*	-> get position of the page break 
		*/
		function getMaxCellHeight($product, $attributes, $table_size) {
			

			if(!empty($product)) {
				
				$i = 0;
				
				foreach($product as $value) {
				
					$count = 0; 				
						
					if(parent::GetStringWidth($value) + 1 >  $table_size[$i]) {
						$count = $count + parent::countMaxHeight(parent::GetStringWidth($value) + 1, $table_size[$i]);
					
					} else if(parent::GetStringWidth($value) != 0) {								
						$count++;
					}

					if($count_max < $count) {
						$count_max = $count;
					}

					$i++;
				}
			}

			if(!empty($attributes)) {

				foreach($attributes as $attribute) {
					
					$count_attributes++;
					
					for($j = 0; $j < count($attribute); $j++) {

						$count = 0;
						$string_width = parent::GetStringWidth($attribute[$j]);
						if($string_width + 1 > $table_size[$j]) {
							$count = $count + parent::countMaxHeight($string_width, $table_size[$j]);
						}						
						if($string_width != 0) {
							$count++;
						}
						if($count_max_attributes < $count) {
							$count_max_attributes = $count;
						}
					}				
				}
			}	

			return(($count_max + $count_attributes + $count_max_attributes) * parent::getCellHeight());
		}


		/* 
		*	-> get position of the page break 
		*/
		function getMaxHeight($order, $table_size) {
			foreach($order as $value) {				
				$count++;
				for($j = 0; $j < count($value); $j++) {
					$string_width = parent::GetStringWidth($value[$j]);
					if($string_width + 1 > $table_size[$j]) {
						//echo $table_size[$j] . " - " . $string_width . " - " . $value[$j] . "<br>";
						$count = $count + parent::countMaxHeight($string_width, $table_size[$j]);
					}
				}			
			}
			return($count * parent::getCellHeight());
		}		


		/* 
		*	-> get the Conditions 
		*/
		function getConditions() {
			
			// -> font face/style/size/color
			parent::getFont($this->pdf_fonts['CONDITIONS']);
			
			parent::SetY(parent::GetY());
			
			parent::SetX(parent::getLeftMargin());
			
			parent::MultiCell(parent::getInnerWidth(), parent::getCellHeight(), $this->pdf_conditions, 0, 'L', 0);
			
			return;
		}
		
		
		/* 
		*	-> get the withdrawal 
		*/
		function getWithdrawal() {
			
			// -> font face/style/size/color
			parent::getFont($this->pdf_fonts['CONDITIONS']);			
			
			parent::SetY(parent::GetY());
			
			parent::SetX(parent::getLeftMargin());
			
			parent::MultiCell(parent::getInnerWidth(), parent::getCellHeight(), $this->pdf_withdrawal, 0, 'L', 0);
			
			return;
		}
		
		
		/* 
		*	-> check if ot_gm_tax_free is installed
		*/
		function is_ot_gm_tax_free() 
		{			
			$t_query = xtc_db_query("
									SELECT
										*
									FROM
										configuration
									WHERE
										configuration_value
									LIKE
										'%ot_gm_tax_free%'
			");
			
			if(xtc_db_num_rows($t_query) > 0)
			{
				return true;
			}
			else
			{
				return false;
			}						
		}
	}
?>